package cn.ahaiahaixx.dp.factory;

import java.util.HashMap;
import java.util.Map;

/**
 * 工厂类，提供教师类的创建和管理的方法
 * 
 * @author Aiden Pearce
 *
 */
public class Boss {

  /**
   * 教师集合
   */
  public static Map<String, Iteacher> teachers = new HashMap<>();

  /**
   * \ 单例模式的工厂方法
   * 
   * @param type
   *          教师类型
   * @return 对应类型的教师
   */
  public static Iteacher szhaopin(String type) {
    // 校验type不能为Null,且将type转换成小写
    type = type == null ? "java" : type.toLowerCase();

    // 如果对应类型的教师存在就直接返回集合中对应的教师
    if (teachers.containsKey(type)) {
      return teachers.get(type);
    }
    // 否则就会创建对应类型的教师放置到集合中再返回
    Iteacher teacher = null;
    if ("java".equals(type)) {
      teacher = new JavaTeacher();
    } else if ("python".equals(type)) {
      teacher = new PythonTeacher();
    } else if ("网络".equals(type)) {
      teacher = new WlTeacher();
    } else {
      teacher = new JavaTeacher();
    }
    teachers.put(type, teacher);
    return teacher;
  }

  /**
   * 工厂方法，用于生产教师
   * 
   * @param type
   *          教师类型
   * @return 指定类型的教师
   */
  public static Iteacher zhaopin(String type) {
    if ("java".equalsIgnoreCase(type)) {
      return new JavaTeacher();
    } else if ("python".equalsIgnoreCase(type)) {
      return new PythonTeacher();
    }
    // 默认返回java教师
    return new JavaTeacher();
  }

}
